package hehe.aop.base;

import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;

/**
 * 代理类
 *<B>说明：</B>
 *<pre>
 * 略
 *</pre>
 *<B>示例：</B>
 *<pre>
 *  略
 *</pre>
 *<B>日志：</B>
 *<pre>
 *  略
 *</pre>
 *<B>注意事项：</B>
 *<pre>
 *  略
 *</pre>
 */
public class Proxy
{
    /**
     * 委托类
     *<B>说明：</B>
     *<pre>
     *  略
     *</pre>
     */
    private Object target;

    /**
     * 代理回调
     *<B>说明：</B>
     *<pre>
     *  略
     *</pre>
     */
    private MethodInterceptor proxyCallback;

    public Proxy(Object target,MethodInterceptor proxyCallback)
    {
        this.target = target;
        this.proxyCallback = proxyCallback;
    }

    /**
     * 创建代理类
     *<B>说明：</B>
     *<pre>
     *  略
     *</pre>
     */
    public Object createProxy()
    {
        Enhancer enhancer = new Enhancer();
        enhancer.setCallback(this.proxyCallback);//回调函数  拦截器
        //设置代理对象的父类,可以看到代理对象是目标对象的子类。所以这个接口类就可以省略了。
        enhancer.setSuperclass(this.target.getClass());
        return enhancer.create();
    }
}
